AWS CodeStarプロジェクトを本番稼働用に移行する
いわさです。
CodeStarでクイックに開発パイプラインを用意することが可能ですが、その後運用環境・本番稼働環境に移行したい場合はどのようにしたら良いでしょうか。
AWSドキュメントにはタイトルのままの内容のページが用意されています。
ざっくりいうと、ドキュメントには「CodeStarでデプロイされたテンプレートを使って複製する」という内容が記載されています。
しかし、試してみるとそれだけだとうまくいきません。
これを行うためにはいくつかの下準備をしっかり行う必要がありますので本日はそのあたりを記事にしました。
下準備
CodeStarテンプレートの取得
CodeStarでプロジェクトを作成するとCloudFormationに新規スタックが作成されます。
ひとつはCodeStarが用意したパイプラインで、もうひとつはそのパイプラインによってデプロイされた実行環境です。
本番環境を作成するときには、このパイプラインテンプレートを使って、本番用パイプラインを複製します。
最新ソースコードの用意と配置
開発パイプラインで開発を進めたソースコード一式をどうやって本番環境へ反映させるのでしょうか。
CodeStarテンプレートを使う場合は、ソースコード一式をzip化しS3バケットへ配置します。
そして、パイプラインを作成する際にCodeCommitオブジェクトにバケット情報を渡すことでリポジトリの初期コードとして取り込まれる形となります。
デフォルトでは、パイプラインはtemplate.yml
を使ってデプロイを行います。
ただし、このYAMLはCodeStar用のTransformマクロが設定されており、CodeStarを使わない場合デプロイの際にこの記述が原因でエラーが発生してしまいます。
AWS CodeStar encountered an error while handling your request: The project ID was not found: starp. Make sure that the project ID is correct and then try again.. Try again with different parameters, or contact AWS Support.
Transformの記述は不要なので削除しましょう。
git clone
済み環境でgit archive
を使ってzip化しましょう。
そして任意のS3バケットを作成しアップロードしておきます。
iwasa.takahito@hoge iwasa-codestart % ls AspNetCoreWebApplication README.md requirements.txt template.yml AspNetCoreWebApplication.sln appspec.yml scripts AspNetCoreWebApplicationTest buildspec.yml template-configuration.json iwasa.takahito@hoge iwasa-codestart % git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean iwasa.takahito@hoge iwasa-codestart % git archive HEAD -o code.zip iwasa.takahito@hoge iwasa-codestart % ls AspNetCoreWebApplication README.md code.zip scripts AspNetCoreWebApplication.sln appspec.yml codecommit.zip template-configuration.json AspNetCoreWebApplicationTest buildspec.yml
ロールへの権限付与
まだありまして、デプロイに使うロールがあるのですが権限が不足しています。
ロールに以下の権限を追加してください。
また、PermissionsBoundaryはここでは不要なので削除します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole", "ec2:RunInstances", "ec2:CreateTags", "kms:Decrypt", "kms:Encrypt", "cloudformation:CreateChangeSet", "cloudformation:ExecuteChangeSet", "kms:GenerateDataKey*" ], "Resource": "*" } ] }
稼働用VPCとサブネットの用意
CodeStarプロジェクトを作成するときのVPCでも良いですが、移行先でネットワーク環境を分離する必要があると思いますので、新規にVPCを作成しアプリケーションをデプロイするサブネットを用意しておきましょう。
パイプラインスタックを作成する際にパラメータにVPCIDとサブネットIDを指定する必要があります。
移行
これらの下準備をちゃんとしておくと成功します。
CloudFormationスタックをデプロイするとパイプラインが作成され、自動でアプリケーションの展開処理が始まります。
パラメータのプロジェクトIDは任意の値で良いです。
S3のバケットとキーは以下のように格納したコードのバケット名とファイル名を入力します。
パイプラインスタックのデプロイに成功しました。
CodePipelineを見てみると作成したばかりのパイプラインが自動実行されていると思います。
アプリケーションデプロイも成功しました。
EC2コンソール画面からアクセスしてみましょう。
CodeStarデフォルトプロジェクトの場合はHTTPS化されていないのでそこだけ気をつけてください。
Webサイトへもアクセス出来ました。
まとめ
CodeStarのテンプレートを使ってデプロイを行う際に必要な下準備がいくつかあることを覚えておきましょう。
また、この方法で移行するとなると、CodeStarプロジェクトを使っている場合のパイプライン周りの変更はCloudFormationからの変更のみとしたほうが良いですね。
マネージメントコンソールから直接変更した場合に変更をテンプレートで追従できていないと、本番稼働へ切り替える際に不都合が起きそうです。